package main

import (
	"communication-system/common/utils"
	"communication-system/server/model"
	"fmt"
	"net"
)

//该go文件主要是提供server服务器端，主要作用是:
//1.启动一个server端监听等待客户端连接
//2.启动一个协程进行消息体的处理，直接交给控制器处理
//编写一个函数，对userDao初始化

func initUserDao() {
	model.MyUserDao = model.NewUserDao(utils.Pool)
}

func process(conn net.Conn) {
	//调用总控制器
	proccrontol := &Proccrontol{
		Conn: conn,
	}
	err := proccrontol.process2()
	if err != nil {
		fmt.Println("客户端与服务端交互异常,已结束通信")
	}

}

func main() {
	//启动服务器的时候我们先去初始化我们的redis连接池
	utils.InitPool()
	initUserDao()

	//启动一个服务器监听
	Listen, err := net.Listen("tcp", "127.0.0.1:8888")
	if err != nil {
		fmt.Println("net.Listen启动失败,err=", err)
	}
	//延时关闭监听
	defer Listen.Close()
	fmt.Println("启动一个服务器监听成功")
	//等待客户端进行连接
	for {

		conn, err := Listen.Accept()
		if err != nil {
			fmt.Println("Listen.Accept失败,err=", err)
		}

		go process(conn)

	}

}
